package com.snow.useviewdemo.function2.deviceid;

import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Build;
import android.provider.Settings;
import android.telephony.TelephonyManager;
import android.text.TextUtils;

import java.util.UUID;

/**
 * Created by zhaoyingtao
 * Date: 2020/7/9
 * Describe:
 */
public class ObtailUtils {
    @SuppressLint({"MissingPermission"})
    public static String getDeviceID(Context mContext) {
        String sDeviceID = "unKnow";//有一个默认值，因为不确保不为空
        if (!TextUtils.isEmpty(sDeviceID)) {
            return sDeviceID;
        } else {
            try {
                TelephonyManager tm = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
                if (Build.VERSION.SDK_INT >= 26) {
                    sDeviceID = tm.getImei();
                } else if (Build.VERSION.SDK_INT >= 23) {
                    sDeviceID = tm.getDeviceId(0);
                } else {
                    sDeviceID = tm.getDeviceId();
                }
                sDeviceID = setDeviceID(mContext);
                return sDeviceID;
            } catch (Exception var2) {
                return sDeviceID;
            }
        }
    }

    private static String setDeviceID(Context mContext) {
        return Settings.Secure.getString(mContext.getContentResolver(),
                "android_id");
    }

    /**
     * 获取手机唯一标识第一种方法
     * 实现原理：通过取出ROM版本、制造商、CPU型号、以及其他硬件信息的长度拼起来的数据，
     * 大多数的Build成员都是字符串形式的，我们只取他们的长度信息。我们取到13个数字，并在前面加上“35”。这样这个ID看起来就和15位IMEI一样了。
     * <p>
     * 缺点：如果两个手机应用了同样的硬件以及Rom 镜像就会得出相同的值，（出现类似情况的可能性基本可以忽略）
     *
     * @return
     */
    public static String getPhoneUniqueIdentificationOne() {
        String serial = "unknow";
        // 35是IMEI开头的号
        String m_szDevIDShort = "35" + Build.BOARD.length() % 10 + Build.BRAND.length() % 10 +
                Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10 +
                Build.DISPLAY.length() % 10 + Build.HOST.length() % 10 + Build.ID.length() % 10 + Build.MANUFACTURER.length() % 10 +
                Build.MODEL.length() % 10 + Build.PRODUCT.length() % 10 + Build.TAGS.length() % 10 + Build.TYPE.length() % 10 +
                Build.USER.length() % 10; //13 位
        try {
            serial = android.os.Build.class.getField("SERIAL").get(null).toString();
            // API>=9 使用serial号
//            return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
            return m_szDevIDShort;

        } catch (Exception exception) {
            // serial需要一个初始化       serial = "serial"; // 随便一个初始化
        }
        // 使用硬件信息拼凑出来的15位号码
        return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
    }
}
